package to4.client;

import java.util.ArrayList;

import com.google.gwt.core.client.JsArray;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.visualization.client.DataTable;
import com.google.gwt.visualization.client.Selection;
import com.google.gwt.visualization.client.AbstractDataTable.ColumnType;
import com.google.gwt.visualization.client.events.SelectHandler;
import com.google.gwt.visualization.client.visualizations.Table;

public class ZonderHome {
	public TO4 thema;
	private int aantal = 0;
	private DataTable myData = DataTable.create();
	private Table chart = new Table();
	private ZonderVervoer1 zonderVervoer1 = new ZonderVervoer1(this);
	private ZonderVoegAutoToe voegAutoToe = new ZonderVoegAutoToe(this);
	private ZonderWijzigVoorkeuren wijzigVoorkeur = new ZonderWijzigVoorkeuren(this);
	private ZonderVervoer2 zonderVervoer2 = new ZonderVervoer2(this);
	private wijzigEmailWachtwoord wijzigWachtwoord = new wijzigEmailWachtwoord(this);
	private Contact contact = new Contact(this);
	private String emailadresIngeschrevenAuto;
	private String wachtwoord;

	public ZonderHome(TO4 thema5){
		this.thema = thema5;
	}

	public Panel createPage(final String email){
		AsyncCallback<String> ww = new AsyncCallback<String>(){
			@Override
			public void onFailure(Throwable caught) {
				// TODO Auto-generated method stub
			}
			@Override
			public void onSuccess(String result) {
				wachtwoord = result;

			}
		};
		thema.myService.getWW(email, ww);

		FlowPanel homePanel = new FlowPanel();

		VerticalPanel menuVertical = new VerticalPanel();
		VerticalPanel menuVertical2 = new VerticalPanel();

		HorizontalPanel horizon1 = new HorizontalPanel();
		HorizontalPanel horizon2 = new HorizontalPanel();
		HorizontalPanel horizon3 = new HorizontalPanel();
		HorizontalPanel horizon4 = new HorizontalPanel();
		HorizontalPanel horizon5 = new HorizontalPanel();
		HorizontalPanel horizon6 = new HorizontalPanel();
		HorizontalPanel horizon7 = new HorizontalPanel();
		HorizontalPanel horizon8 = new HorizontalPanel();
		HorizontalPanel horizon9 = new HorizontalPanel();
		HorizontalPanel horizon10 = new HorizontalPanel();
		HorizontalPanel horizon11 = new HorizontalPanel();
		HorizontalPanel horizon12 = new HorizontalPanel();
		HorizontalPanel horizon13 = new HorizontalPanel();
		HorizontalPanel horizon14 = new HorizontalPanel();

		HorizontalPanel empty1 = new HorizontalPanel();
		HorizontalPanel empty2 = new HorizontalPanel();
		Label emptyLab1 = new Label("");
		emptyLab1.addStyleName("empty1");
		empty1.add(emptyLab1);
		Label emptyLab2 = new Label("");
		emptyLab2.addStyleName("empty2");
		empty2.add(emptyLab2);

		Label welkomLabel1 = new Label(email);
		welkomLabel1.setVisible(false);
		Label knownGegevens = new Label("Gegevens");
		knownGegevens.addStyleName("knownGegevenshomezonder");
		Label standaardNaamLabel = new Label("Naam:");
		standaardNaamLabel.addStyleName("standaardNaamLabel");
		Label standaardGeboorteLabel = new Label("Geboortedatum:");
		standaardGeboorteLabel.addStyleName("standaardNaamLabel");
		Label standaardAdresLabel = new Label("Adres:");
		standaardAdresLabel.addStyleName("standaardNaamLabel");
		Label standaardPostcodeLabel = new Label("Postcode en woonplaats:");
		standaardPostcodeLabel.addStyleName("standaardNaamLabel");
		Label standaardTelefoonnummerLabel = new Label("Telefoonnummer:");
		standaardTelefoonnummerLabel.addStyleName("standaardNaamLabel");
		Label standaarReisreisLabel = new Label("Reizen:");
		standaarReisreisLabel.addStyleName("standaardNaamLabel");
		Label standaardReisRokenLabel = new Label("Roken:");
		standaardReisRokenLabel.addStyleName("standaardNaamLabel");
		Label standaardReisFietsLabel = new Label("Fiets:");
		standaardReisFietsLabel.addStyleName("standaardNaamLabel");
		Label standaardProvincieLabel = new Label("Provincie:");
		standaardProvincieLabel.addStyleName("standaardNaamLabel");

		final Label naamLabel = new Label();
		final Label geboorteLabel = new Label();
		final Label adresLabel = new Label();
		final Label postcodeLabel = new Label();
		final Label telefoonLabel = new Label();
		final Label FietsLabel = new Label();
		final Label RokenLabel = new Label();
		final Label ReizenLabel = new Label();
		final Label ProvincieLabel = new Label();


		Anchor autoToevoegen = new Anchor("Eigen auto toevoegen");
		autoToevoegen.addStyleName("zonderAutoToevoegen");
		autoToevoegen.addClickHandler(new ClickHandler(){
			@Override
			public void onClick(ClickEvent event) {
				showVoegAutoToe(email);
			}
		});

		Anchor wijzigVoorkeuren = new Anchor("Wijzig voorkeuren/Gegevens");
		wijzigVoorkeuren.addStyleName("wijzigVoorkeurenGegevenszonder");
		wijzigVoorkeuren.addClickHandler(new ClickHandler(){
			@Override
			public void onClick(ClickEvent event) {
				showWijzigGegevens(email);
			}
		});

		Anchor wijzigEmailAdresWachtwoord = new Anchor("Wijzig emailadres");
		wijzigEmailAdresWachtwoord.addStyleName("wijzigVoorkeurenGegevenszonder");
		wijzigEmailAdresWachtwoord.addClickHandler(new ClickHandler(){
			@Override
			public void onClick(ClickEvent event) {
				showWijzigEmailWachtwoord(email);
			}
		});


		AsyncCallback<String> arrayHomeZonder = new AsyncCallback<String>() {

			@Override
			public void onFailure(Throwable caught) {
				// TODO Auto-generated method stub
			}

			@Override
			public void onSuccess(String result) {
				String[] gesplitteResultaat = result.split("\\:\\*\\:");
				naamLabel.setText(gesplitteResultaat[0]);
				geboorteLabel.setText(gesplitteResultaat[1]);
				adresLabel.setText(gesplitteResultaat[2]);
				postcodeLabel.setText(gesplitteResultaat[3]);
				ProvincieLabel.setText(gesplitteResultaat[4]);
				telefoonLabel.setText(gesplitteResultaat[5]);
				ReizenLabel.setText(gesplitteResultaat[6]);
				RokenLabel.setText(gesplitteResultaat[7]);
				FietsLabel.setText(gesplitteResultaat[8]);
			}

		};
		thema.myService.getArrayHomeZonder(email, arrayHomeZonder);

		horizon1.add(welkomLabel1);
		horizon2.add(knownGegevens);
		horizon3.add(standaardNaamLabel);
		horizon3.add(naamLabel);
		horizon4.add(standaardGeboorteLabel);
		horizon4.add(geboorteLabel);
		horizon5.add(standaardAdresLabel);
		horizon5.add(adresLabel);
		horizon6.add(standaardPostcodeLabel);
		horizon6.add(postcodeLabel);
		horizon7.add(standaardTelefoonnummerLabel);
		horizon7.add(telefoonLabel);
		horizon10.add(standaarReisreisLabel);
		horizon10.add(ReizenLabel);
		horizon11.add(standaardReisRokenLabel);
		horizon11.add(RokenLabel);
		horizon12.add(standaardReisFietsLabel);
		horizon12.add(FietsLabel);
		horizon13.add(standaardProvincieLabel);
		horizon13.add(ProvincieLabel);
		horizon8.add(autoToevoegen);
		horizon9.add(wijzigVoorkeuren);
		horizon14.add(wijzigEmailAdresWachtwoord);


		menuVertical.add(horizon1);
		menuVertical.add(horizon2);
		menuVertical.add(horizon3);
		menuVertical.add(horizon4);
		menuVertical.add(horizon5);
		menuVertical.add(horizon6);
		menuVertical.add(horizon13);
		menuVertical.add(horizon7);
		menuVertical.add(empty2);
		menuVertical.add(horizon10);
		menuVertical.add(horizon11);
		menuVertical.add(horizon12);
		menuVertical.add(empty1);
		menuVertical.add(horizon8);
		menuVertical.add(horizon9);
		menuVertical.add(horizon14);
		final Label auto = new Label("");
		menuVertical2.add(auto);

		final AsyncCallback<ArrayList<String>> opvragenAuto = new AsyncCallback<ArrayList<String>>(){
			@Override
			public void onFailure(Throwable caught) {
				// TODO Auto-generated method stub
			}
			@Override
			public void onSuccess(ArrayList<String> result) {
				if (myData.getNumberOfColumns()==0) {
					myData.addColumn(ColumnType.STRING, "Naam");
					myData.addColumn(ColumnType.STRING, "E-mailadres");
					myData.addColumn(ColumnType.STRING, "Telefoonnr");
					myData.addColumn(ColumnType.STRING, "Provincies");
					myData.addColumn(ColumnType.STRING, "Reizen");
					myData.addColumn(ColumnType.STRING, "Roken");
					myData.addColumn(ColumnType.STRING, "Fiets");
					myData.addColumn(ColumnType.STRING, "Plaats");
					if (myData.getNumberOfRows() == 0) {
						myData.addRow();
					}
				}
				if (result.size() != 0){
					emailadresIngeschrevenAuto = result.get(1);
				}

				for (int i = 0; i<result.size();i++) {
					myData.setValue(0, i, result.get(i));
				}
				if (result.size() == 0){
					auto.setText("U heeft zich nog niet ingeschreven bij een auto, klik op Vervoer om u in te schrijven bij een auto");
					auto.addStyleName("standaardNaamLabel1");
					chart.removeFromParent();
				}
				else {
					auto.setText("");
					chart.draw(myData);
					chart.addStyleName("vizZH");     
				}
			}
		};
		thema.myService.IngeschrevenbijAuto(email,opvragenAuto);
		Label mededeling1 = new Label("Als er mensen met u mee rijden dan verschijnt hieronder een tabel met iedereen die met u meerijd, controleer dit regelmatig");
		Label mededeling2 = new Label("Om u uit te schrijven bij deze auto, klik op de auto in de tabel");
		mededeling1.addStyleName("methomemededeling1");
		mededeling2.addStyleName("methomemededeling2");
		menuVertical.add(mededeling1);
		menuVertical.add(mededeling2);
		menuVertical.add(chart);
		homePanel.add(menuVertical);
		homePanel.add(menuVertical2);

		

		if (aantal == 0) {
			chart.addSelectHandler(new SelectHandler(){
				@Override
				public void onSelect(SelectEvent event) {
					aantal++;
					
					boolean b = Window.confirm("Weet u zeker dat u zich wilt uitschrijven?");
					if(b == true){
						
						JsArray<Selection> selections = chart.getSelections();
						int geselecteerderij=0;
						for (int i = 0; i < selections.length(); i++) {
							Selection selection = selections.get(i);
							geselecteerderij = selection.getRow();

						}
						AsyncCallback<Boolean> verwijderUitAuto = new AsyncCallback<Boolean>(){

							@Override
							public void onFailure(Throwable caught) {
								// TODO Auto-generated method stub

							}

							@Override
							public void onSuccess(Boolean result) {
								if(result == true){
									Window.alert("Succesvol verwijderd");
									thema.sendInlog(email, wachtwoord);
									chart.removeFromParent();
								}
								if(result == false){
									Window.alert("Er is een probleem opgetreden, neem contact op met ons");

								}

							}

						};
						thema.myService.verwijderAutoZH(email, emailadresIngeschrevenAuto, verwijderUitAuto);
					}
				}
			});
		}
		return homePanel;
	}

	public void showZonderVervoer2(String emailZonder, String emailMet){
		RootPanel.get("menubar").setVisible(true);
		RootPanel.get("container_mid_home").setVisible(true);
		RootPanel.get("container_mid_btm_800").setVisible(true);
		RootPanel.get("wrapper_mid").setVisible(true);

		RootPanel.get("container_top").setVisible(false);
		RootPanel.get("container_mid_reg1").setVisible(false);
		RootPanel.get("container_btm").setVisible(false);
		RootPanel.get("menubarmet").setVisible(false);

		RootPanel.get("container_mid_home").clear();
		RootPanel.get("container_mid_home").add(zonderVervoer2.createPage(emailZonder, emailMet));
	}

	public void showHomeZonder(String email){
		RootPanel.get("menubar").setVisible(true);
		RootPanel.get("container_mid_home").setVisible(true);
		RootPanel.get("container_mid_btm_800").setVisible(true);
		RootPanel.get("wrapper_mid").setVisible(true);

		RootPanel.get("container_top").setVisible(false);
		RootPanel.get("container_mid_reg1").setVisible(false);
		RootPanel.get("container_btm").setVisible(false);
		RootPanel.get("menubarmet").setVisible(false);

		RootPanel.get("container_mid_home").clear();
		RootPanel.get("container_mid_home").add(createPage(email));
	}


	public void showVervoer1Zonder(String email){
		RootPanel.get("menubar").setVisible(true);
		RootPanel.get("container_mid_home").setVisible(true);
		RootPanel.get("container_mid_btm_800").setVisible(true);
		RootPanel.get("wrapper_mid").setVisible(true);

		RootPanel.get("container_top").setVisible(false);
		RootPanel.get("container_mid_reg1").setVisible(false);
		RootPanel.get("container_btm").setVisible(false);
		RootPanel.get("menubarmet").setVisible(false);

		RootPanel.get("container_mid_home").clear();
		RootPanel.get("container_mid_home").add(zonderVervoer1.createPage(email));
	}

	public void showVoegAutoToe(String email){
		RootPanel.get("menubar").setVisible(true);
		RootPanel.get("container_mid_home").setVisible(true);
		RootPanel.get("container_mid_btm_800").setVisible(true);
		RootPanel.get("wrapper_mid").setVisible(true);

		RootPanel.get("container_top").setVisible(false);
		RootPanel.get("container_mid_reg1").setVisible(false);
		RootPanel.get("container_btm").setVisible(false);
		RootPanel.get("menubarmet").setVisible(false);

		RootPanel.get("container_mid_home").clear();
		RootPanel.get("container_mid_home").add(voegAutoToe.createPage(email));
	}

	public void showWijzigGegevens(String email){
		RootPanel.get("menubar").setVisible(true);
		RootPanel.get("container_mid_home").setVisible(true);
		RootPanel.get("container_mid_btm_800").setVisible(true);
		RootPanel.get("wrapper_mid").setVisible(true);

		RootPanel.get("container_top").setVisible(false);
		RootPanel.get("container_mid_reg1").setVisible(false);
		RootPanel.get("container_btm").setVisible(false);
		RootPanel.get("menubarmet").setVisible(false);

		RootPanel.get("container_mid_home").clear();
		RootPanel.get("container_mid_home").add(wijzigVoorkeur.createPage(email));
	}

	public void showContact(String email){
		RootPanel.get("menubar").setVisible(true);
		RootPanel.get("container_mid_home").setVisible(true);
		RootPanel.get("container_mid_btm_800").setVisible(true);
		RootPanel.get("wrapper_mid").setVisible(true);

		RootPanel.get("container_top").setVisible(false);
		RootPanel.get("container_mid_reg1").setVisible(false);
		RootPanel.get("container_btm").setVisible(false);
		RootPanel.get("menubarmet").setVisible(false);

		RootPanel.get("container_mid_home").clear();
		RootPanel.get("container_mid_home").add(contact.createPage(email));
	}

	public void showWijzigEmailWachtwoord(String email){
		RootPanel.get("menubar").setVisible(true);
		RootPanel.get("container_mid_home").setVisible(true);
		RootPanel.get("container_mid_btm_800").setVisible(true);
		RootPanel.get("wrapper_mid").setVisible(true);

		RootPanel.get("container_top").setVisible(false);
		RootPanel.get("container_mid_reg1").setVisible(false);
		RootPanel.get("container_btm").setVisible(false);
		RootPanel.get("menubarmet").setVisible(false);

		RootPanel.get("container_mid_home").clear();
		RootPanel.get("container_mid_home").add(wijzigWachtwoord.createPage(email));
	}
}